// src/views/WorkOrder/workOrderTypeUtils.ts
/**
 * 工单类型工具函数模块
 * 
 * 该模块提供了工单系统中各种类型的转换和映射功能，主要包括：
 * - 工单状态、优先级、分类、解决方案等枚举值到 Element Plus UI 组件类型的映射
 * - 工单各类属性值到显示文本的转换
 * - UI 组件颜色主题的获取
 * 
 * 通过这些工具函数，可以统一管理系统中工单相关数据的显示样式和文本描述，
 * 确保整个应用中工单数据展示的一致性。
 * 
 * @module workOrderTypeUtils
 */
import { woStatusOptions, woPriorityOptions, woCategoryOptions, woSolutionOptions } from './WorkOrderOptions'

// 定义映射配置接口
interface TypeMapping {
  [key: number]: string
}

// 定义工单状态类型映射配置
const STATUS_TYPE_CONFIG: TypeMapping = {
  0: 'info',    // 已激活
  1: 'danger',  // 已解决
  2: 'success'  // 已关闭
}

// 定义工单优先级类型映射配置
const PRIORITY_TYPE_CONFIG: TypeMapping = {
  0: 'info',    // 低优先级
  1: 'warning', // 中优先级
  2: 'danger'   // 高优先级
}

// 定义工单优先级类型映射配置
const SOLUTION_TYPE_CONFIG: TypeMapping = {
  0: 'success', // 已解决
  1: 'primary', // 待解决
  2: 'info'     // 未解决
}
/**
 * 通用类型获取函数
 * @param value 值
 * @param mapping 映射配置
 * @param defaultType 默认类型
 * @returns Element Plus 文本类型
 */
const getElementType = (
  value: number,
  mapping: TypeMapping,
  defaultType: string = 'info'
): string => {
  return mapping[value] ?? defaultType
}

/**
 * 获取工单状态对应的 Element Plus 文本类型
 */
export const getWoStatusType = (status: number): string => {
  return getElementType(status, STATUS_TYPE_CONFIG, 'info')
}

/**
 * 获取工单优先级对应的 Element Plus 文本类型
 */
export const getWoPriorityType = (priority: number): string => {
  return getElementType(priority, PRIORITY_TYPE_CONFIG, 'info')
}

/**
 * 获取工单解决方案对应的 Element Plus 文本类型
 * @param val 工单解决方案值
 * @returns Element Plus 文本类型
 */
export const getWoSolutionType = (val: number) => {
  return getElementType(val, SOLUTION_TYPE_CONFIG, 'default')
}
/**
 * 获取工单状态标签文本
 */
export const getWoStatusText = (status: number): string => {
  const item = woStatusOptions.value.find((item: any) => item.value == status)
  return item?.label || '未知'
}

/**
 * 获取工单优先级标签文本
 */
export const getWoPriorityText = (priority: number): string => {
  const item = woPriorityOptions.value.find((item: any) => item.value == priority)
  return item?.label || '未知'
}


// 获取工单分类标签文本
export const getWoCategoryText = (val: number) => {
  const item = woCategoryOptions.value.find((item: any) => item.value == val)
  return item?.label || '未知'
}


// 获取选项标签
export const getWoSolutionText = (val: number) => {
  const item = woSolutionOptions.value.find((item: any) => item.value == val)
  return item?.label || '未知'
}

/**
 * 获取 Element Plus 颜色变量名称
 * @param type Element Plus 文本类型
 * @returns CSS 变量名称
 */
export const getElementColorVar = (type: string): string => {
  return `var(--el-color-${type})`
}

// 导出配置供外部使用
export { STATUS_TYPE_CONFIG, PRIORITY_TYPE_CONFIG }